/*
bsp_can/
├── bsp_can_core.c     // CAN核心功能
├── bsp_can_core.h     // CAN核心头文件
├── bsp_can_motor.c    // 电机控制功能
├── bsp_can_motor.h    // 电机控制头文件
└── bsp_can_pid.c      // PID控制功能（可选）

调用者	被调用函数	所在文件	说明
main.c	bsp_can_init()	bsp_can_core.c	系统初始化
main.c	bsp_can_process()	bsp_can_core.c	主循环处理
main.c	motor_pid_xxx_control()	motor_pid.c	PID控制
bsp_can.c	bsp_can_core_init()	bsp_can_core.c	CAN核心初始化
bsp_can.c	bsp_can_motor_init()	bsp_can_motor.c	电机模块初始化
bsp_can.c	bsp_can_core_process()	bsp_can_core.c	CAN核心处理
bsp_can.c	bsp_can_motor_process()	bsp_can_motor.c	电机数据处理
bsp_can_motor.c	bsp_can_send()	bsp_can_core.c	发送CAN消息
bsp_can_motor.c	bsp_can_receive()	bsp_can_core.c	接收CAN消息
motor_pid.c	bsp_can_get_motor_feedback_ptr()	bsp_can_motor.c	获取电机状态
motor_pid.c	pid_calculate()	pid_controller.c	PID计算


数据流向
text
硬件中断 → bsp_can_core.c (接收队列) → bsp_can_motor.c (解析数据) → motor_feedback_t
用户代码 → motor_pid.c (PID计算) → bsp_can_motor.c (打包数据) → bsp_can_core.c (发送队列) → 硬件发送
*/

#include "main.h"
#include "bsp_can_core.h"

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_CAN1_Init();

    // 初始化CAN驱动
    if (BSP_CAN_Init() == 0) {
        printf("CAN初始化成功\r\n");
    }

    while (1) {
        // 处理CAN通信
        BSP_CAN_LOOP();
        
        // 控制电机
        if (bsp_can_get_connected_motors() == MOTOR_COUNT) {
            // 所有电机连接，发送控制指令
            bsp_can_send_mecanum_current(100, 50, 10);
            
            // 获取电机状态
            motor_feedback_t fb = bsp_can_get_motor_feedback(MOTOR_A);
            printf("电机A: 角度=%.1f°, 速度=%.1fRPM\n", fb.angle_deg, fb.velocity_rpm);
        }
        
        HAL_Delay(10);
    }
}

// CAN接收中断回调
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
    if (hcan->Instance == CAN1) {
        bsp_can_rx_callback();
    }
}